import router from '@/router';

import {getToken} from '@/utils/tokenHolder'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import {isHttp} from '@/utils/validate'


NProgress.configure({showSpinner: false});

// 白名单
const whiteList = ['/login', '/logout'];


router.beforeEach(async (to, from, next) => {
  NProgress.start();
  useSettingsStore().setTitle(to.meta && to.meta.title)
  if (getToken()) {
    if (to.path === '/login') {
      next({path: '/'})
      NProgress.done();
    } else {
      if (useUserStore().roles.length === 0) {
        try {
          await useUserStore().getInfo();
          const permissionStore = usePermissionStore();
          let accessRoutes: any = await permissionStore.generateRoutes();
          // 根据roles权限生成可访问的路由表
          accessRoutes.forEach(route => {
            if (!isHttp(route.path)) {
              router.addRoute(route) // 动态添加可访问路由表
            }
          })
          next({...to, replace: true}) // hack方法 确保addRoutes已完成
        } catch (e) {
          await useUserStore().logOut()
          next({path: '/'})
        }
      } else {
        next();
      }
    }
  } else {
    // 没有token
    if (whiteList.indexOf(to.path) !== -1) {
      // 在免登录白名单，直接进入
      next()
    } else {
      next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
      NProgress.done()
    }
  }

})

router.afterEach(() => {
  NProgress.done()
})